home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / objcissu.lha / new-alloc-init < prev    next >
Internet Message Format  |  1993-02-27  |  10KB

  1. Date: Sun, 17 Jan 1993 00:08:30 -0500
  2. From: gsk@world.std.com (Geoffrey S Knauth)
  3. To: gsk@world.std.com
  4. Subject: world objc
  5.  
  6. >From world!eff!sol.ctr.columbia.edu!usc!elroy.jpl.nasa.gov!ames!agate!doc.ic.ac.uk!warwick!uknet!yorkohm!ian Sun Jan 17 00:07:56 EST 1993
  7. Article: 1059 of comp.lang.objective-c
  8. Xref: world comp.lang.objective-c:1059
  9. Path: world!eff!sol.ctr.columbia.edu!usc!elroy.jpl.nasa.gov!ames!agate!doc.ic.ac.uk!warwick!uknet!yorkohm!ian
  10. From: ian@ohm.york.ac.uk (I Stephenson)
  11. Newsgroups: comp.lang.objective-c
  12. Subject: GNU runtime comments/wishes...
  13. Message-ID: <1993Jan15.145253.14258@ohm.york.ac.uk>
  14. Date: 15 Jan 93 14:52:53 GMT
  15. Sender: ian@ohm.york.ac.uk (I Stephenson)
  16. Reply-To: ian@ohm.york.ac.uk
  17. Organization: Electronics Department, University of York, UK
  18. Lines: 42
  19.  
  20. I've just installed gcc-2.3.3 on our MIPS system, to enable me to port code  
  21. from my NeXT.
  22.  
  23. My initial reaction (Yeah! it works!!!) is tempered by a number of niggles that  
  24. I'd like to discuss.
  25.  
  26. My first query is the choice of object creation methods in Object. GNU uses the  
  27. Stepstone style "+new" method, while NeXT are increasingly advocating "+alloc"  
  28. and "-init". Having implemented an object which supported both techniques I  
  29. decided that supporting new (alloc+init) is a REAL pain. I'd rather see things  
  30. go the NeXT way, but more importantly we should all go the same way. I've  
  31. personaly changed my GNU runtime to support alloc and init, but this does mean  
  32. that programs may not work on other platforms.
  33.  
  34. Are there any plans to establish a more complete set of objects? Stuff like  
  35. List is easy to write, but when will we be able to expect this sort of stuff,  
  36. and what is reasonable to expect. It would be VERY counterproductive for  
  37. everyone to go off and write there own versions.
  38.  
  39. Why does GNU dislike #import so much - true it isn't realy needed but is there  
  40. realy any need for cccp to give quite such an extensive programming lesson and  
  41. policy statement every time it encounters one. #import is a lot neater than  
  42. using #defines for each include file, which is a real hack. (once again I  
  43. changed the default on my version to suppress the warning)
  44.  
  45. The above three are basicaly compatability issues, this last one is a plea for  
  46. help! Is there any way to dynamically load objects into GNU ObjC. I need this  
  47. facility desperatly, but don't know sufficient about the insides of gcc to be  
  48. able to add it. It's far more important to Objective C than to C, (due to the  
  49. encapsulation available) and I'd love to see it added to the runtime as soon as  
  50. possible. This facility is the last thing standing between me and a great  
  51. portable application (It's true! Objc C does make porting programss easier -  
  52. I've taken a prog from NS to X in a very reasonable length of time even  
  53. including the development of a graphics library). If anyone has any pointers on  
  54. this HELP!!
  55.  
  56. Despite the above stuff being negative, and prehaps somewhat rash - I haven't  
  57. examined the code in too much detail, I'm realy pleased that at last the code  
  58. is available. ObjC deserves a wider audience than it currently recieves.
  59.  
  60. Ian Stephenson
  61. ian@ohm.york.ac.uk
  62.  
  63.  
  64. >From world!uunet!cs.utexas.edu!qt.cs.utexas.edu!yale.edu!yale!gumby!destroyer!cs.ubc.ca!uw-beaver!news.u.washington.edu!stein.u.washington.edu!wiml Sun Jan 17 00:07:57 EST 1993
  65. Article: 1060 of comp.lang.objective-c
  66. Xref: world comp.lang.objective-c:1060
  67. Path: world!uunet!cs.utexas.edu!qt.cs.utexas.edu!yale.edu!yale!gumby!destroyer!cs.ubc.ca!uw-beaver!news.u.washington.edu!stein.u.washington.edu!wiml
  68. From: wiml@stein.u.washington.edu (William Lewis)
  69. Newsgroups: comp.lang.objective-c
  70. Subject: Re: GNU runtime comments/wishes...
  71. Date: 15 Jan 1993 21:56:45 GMT
  72. Organization: University of Washington
  73. Lines: 57
  74. Message-ID: <1j7butINNpal@shelley.u.washington.edu>
  75. References: <1993Jan15.145253.14258@ohm.york.ac.uk>
  76. NNTP-Posting-Host: stein.u.washington.edu
  77.  
  78. ian@ohm.york.ac.uk (I Stephenson) writes:
  79. >My first query is the choice of object creation methods in Object. GNU uses 
  80. >the Stepstone style "+new" method, while NeXT are increasingly advocating 
  81. >"+alloc" and "-init". Having implemented an object which supported both 
  82. >techniques I decided that supporting new (alloc+init) is a REAL pain. I'd 
  83. >rather see things go the NeXT way, but more importantly we should all go 
  84. >the same way. I've personaly changed my GNU runtime to support alloc and 
  85. >init, but this does mean that programs may not work on other platforms.
  86.  
  87. I also much prefer the alloc/init method, because of its versaitility. Ideally,
  88. only Object should implement any alloc methods, but Object categories
  89. can provide new ways of allocating space without having to change existing
  90. code. An example of this is NeXT's zone allocation system; it could also
  91. be used for statically- or stack-allocated objects. 
  92.  
  93. It might be possible to automatically generate corresponding +new methods
  94. (using the default alloc) for all of the -init methods a class supports,
  95. but I don't think it's really worth the trouble. 
  96.  
  97. In an ideal world, I think that it should be possible to do
  98. foo = [FooClass newThis:blegga andThat:blurfl]; and get a working
  99. object, *but* that +alloc and -init would still behave as they do. 
  100. In other words, there would no where be any nontrivial implementation
  101. of any +new method; it would call the default alloc, followed by the
  102. corresponding init. When you want to override the default alloc, you
  103. call alloc and init separately "by hand". Perhaps this could be done
  104. as a macro --- for a long time I've wanted to see cccp extended to
  105. allow parameterized macros in ObjC style as well as C style,
  106. so that I could do
  107.  
  108. #define [arg1 doThis:arg2 andThat:arg3]  printf("%s likes foo %s bar %f\n", \
  109.     [arg1 name], arg2, atof(arg3));
  110.  
  111. but I think this would require significant tweaking of cccp's rudimentary
  112. parsing abilities, because of the neccessity to keep track of the level
  113. of square-bracket-ization and match up the different chunks of the method name.
  114. This would provide a facility vaguely analogous to C++'s inlining, I
  115. suppose.
  116.  
  117. >Why does GNU dislike #import so much - true it isn't realy needed but is there
  118. >realy any need for cccp to give quite such an extensive programming lesson and
  119. >policy statement every time it encounters one. #import is a lot neater than  
  120. >using #defines for each include file, which is a real hack. (once again I  
  121. >changed the default on my version to suppress the warning)
  122.  
  123. I think putting up with random religious diatribes in your software is
  124. just one of the prices you pay for using GNU stuff. If it really anonys
  125. you you can always fix the sources, so it's not too bad. Personally, I agree
  126. with GNU's sentiment that #import is solving the multiple-inclusion
  127. problem the wrong way, and that the fact that a header should only be
  128. included once should somehow be associated with the header and not with
  129. the files that include it; but I'm still using #import because it's convenient.
  130. IMHO, automatic code generators (such as InterfaceBuilder) should place
  131. the #ifdef/#define/#endif around the header files they generate. Most of my
  132. classes are originally created by IB anyway, and then fleshed out by hand
  133. (but then, most of my classes are graphical in nature...)
  134.  
  135.  
  136.  
  137. >From world!uunet!nwnexus!korona!pkron Sun Jan 17 00:07:58 EST 1993
  138. Article: 1061 of comp.lang.objective-c
  139. Xref: world comp.lang.objective-c:1061
  140. Path: world!uunet!nwnexus!korona!pkron
  141. From: pkron@corona.wa.com (Peter Kron)
  142. Newsgroups: comp.lang.objective-c
  143. Subject: Re: GNU runtime comments/wishes...
  144. Message-ID: <9.UUL1.3#16216@corona.wa.com>
  145. Date: Sat, 16 Jan 93 07:00:10 PDT
  146. References: <1j7butINNpal@shelley.u.washington.edu>
  147. Organization: Corona Design, Inc.
  148. Reply-To: pkron@corona.wa.com
  149. Lines: 46
  150.  
  151. > From: wiml@stein.u.washington.edu (William Lewis)
  152. > Newsgroups: comp.lang.objective-c
  153. > Subject: Re: GNU runtime comments/wishes...
  154. > Date: 15 Jan 1993 21:56:45 GMT
  155. >
  156. > ...
  157. > Personally, I agree
  158. > with GNU's sentiment that #import is solving the multiple-inclusion
  159. > problem the wrong way, and that the fact that a header should only be
  160. > included once should somehow be associated with the header and not with
  161. > the files that include it; but I'm still using #import because it's convenient.
  162. > IMHO, automatic code generators (such as InterfaceBuilder) should place
  163. > the #ifdef/#define/#endif around the header files they generate. Most of my
  164. > classes are originally created by IB anyway, and then fleshed out by hand
  165. > (but then, most of my classes are graphical in nature...)
  166.  
  167. Your point is taken, but not pragmatic. As you say, #import is "convenient."
  168. The #ifdef schemes I've seen always put #ifdef's around the #include as
  169. well as the body of the header.
  170.  
  171. #ifndef _FOOHEADER
  172. #include    "fooheader.h"
  173. #endif
  174.  
  175. Although the compilation result is the same, heavily recursive header
  176. calls will seriously affect *time* to compile. Code generators don't
  177. help that much, because the headers required by the object aren't known
  178. until it is "fleshed out." This sort of style violates your ideal that
  179. once-only inclusion be a property of the header, and is a lot more tedious
  180. for the programmer.
  181.  
  182. For static libraries, precompiled headers work pretty well (just
  183. #include "theworld.h"), but they are often sensitive to changes in
  184. header usage, which invalidate the precompile.
  185.  
  186. Certainly better design will reduce these problems, but again, *in practice*
  187. we need to make things as simple as possible. In my experience, #import
  188. is almost always suitable--it should be the rule not the exception. If not,
  189. we should let it die a natural death when (and if :-) ) our design
  190. skills make it unnecessary.
  191. ---------------
  192. Peter Kron
  193. Corona Design, Inc.
  194. Peter_Kron@corona.wa.com
  195.  
  196.  
  197.  
  198.  
  199.